package com.android.support.lib.universal.base;

import java.io.File;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

import com.android.support.lib.universal.listenner.BaseListenner;
import com.android.support.lib.universal.util.UtilimageThumbnail;
import com.android.support.lib.universal.util.Utilimg;
import com.android.support.lib.universal.util.Utiltime;
import com.android.support.lib.universal.view.general.CircleImageView;
import com.android.support.lib.universal.view.dialog.AlertDialogPhoto;

/**
 * 需要拍照，本地相册获取图片功能，继承本Actvitity即可。 使用说明： 一：子类实例化
 * RoundImageView圆形图片对象，如果不为空，会自动加载图像。不实例化也可以。 二：子类直接调用 onClik()方法即可。 三：重写
 * onSuccess(String result);方法，图片加载成功后，会回调该方法，并且返回该图片的本地存储地址。
 *
 * @author 彭治铭
 */
public class BasePhotoActivity extends BaseActivity implements BaseListenner{

    Uri fileUri = null;// 相机拍照时创建的Uri链接,fileUri.getPath()获取拍照图片路径
    protected CircleImageView roundImageView;// 图像，需要在子类中去实例化。如果不为空，会自动加载图像
    Utilimg utilimg = new Utilimg();
    Utiltime time = new Utiltime();

    @Override
    protected void initUI() {
        // TODO Auto-generated method stub

    }

    @Override
    protected void listenner() {
        // TODO Auto-generated method stub

    }

    AlertDialogPhoto alertDialogPhoto = null;// 图片设置成功后，再消除弹窗。

    /**
     * 子类中调用改方法。
     */
    public void onClik() {
        alertDialogPhoto = new AlertDialogPhoto(this, false);
        alertDialogPhoto.setBtn_camera(new OnClickListener() {// 相机

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                camera();
            }
        });
        alertDialogPhoto.setBtn_photo(new OnClickListener() {// 相册，取消按钮不需要再添加事件，已经内置。

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                photo();
            }
        });
    }

    /**
     * 相册
     */
    public void photo() {
        try {
            Intent i = new Intent();
            i.setType("image/*");
            i.putExtra("return-data", true);
            i.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(i, Activity.DEFAULT_KEYS_SHORTCUT);
        } catch (Exception e) {
            // TODO: handle exception
            Log.e("test", "相册崩坏" + e.getMessage());
        }

    }

    /**
     * 相机
     */
    public void camera() {
        try {
            Intent it = new Intent("android.media.action.IMAGE_CAPTURE");
            File file = utilimg.createHeadFile(time.getAbsoluteTime(null));// 创建图片，以时间命名
            fileUri = Uri.fromFile(file);
            it.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
            startActivityForResult(it, Activity.DEFAULT_KEYS_DIALER);
        } catch (Exception e) {
            // TODO: handle exception
            Log.e("test", "相机崩坏" + e.getMessage());
        }

    }

    /**
     * 返回结果
     */
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
        super.onActivityResult(requestCode, resultCode, data);
        try {
            Bitmap bm = null;
            String path = null;
            // 相册
            if (requestCode == Activity.DEFAULT_KEYS_SHORTCUT && data != null
                    && data.getData() != null) {// 验证返回数据不为null
                Uri uri = data.getData();
                String photoPath = null;
                try {
                    photoPath = utilimg.getPhotoPath(this, data);// 获取相册图片路径
                } catch (Exception e) {
                    // TODO: handle exception
                    Log.e("test", "相册图片路径获取失败" + e.getMessage());
                }
                // 创建新图片
                File file = utilimg.createHeadFile("temp");
                boolean result = utilimg.writeFile(this.getContentResolver(),
                        file, uri, photoPath);// 将Uri图片的内容复制到file上,成功返回true
                if (result) {
                    path = file.getAbsolutePath();// 获取图片路径
                    bm = BitmapFactory.decodeFile(path);
                    // 处理图片旋转,前面UtilImg.writeFile已经做了图片旋转的处理，所以再次不需要再做处理。
                    // if (photoPath != null) {
                    // bm = UtilImg.rotateBitmap(photoPath, bm);
                    // }
                }
            }
            // 相机
            else if (requestCode == Activity.DEFAULT_KEYS_DIALER) {
                // 获取图片路径
                path = fileUri.getPath();
                bm = BitmapFactory.decodeFile(path);
                // 处理图片旋转
                bm = utilimg.rotateBitmap(path, bm);
                // 图片压缩
                bm = utilimg.getScaleBitmap(path, bm, 158, 80);
            }
            // 设置图片
            if (bm != null) {
                if (alertDialogPhoto != null) {// 图片获取成功，取消弹出框。
                    alertDialogPhoto.dismiss();
                }
                if (roundImageView != null) {
                    UtilimageThumbnail imageThumbnail = new UtilimageThumbnail();
                    int scale = imageThumbnail.reckonThumbnail(bm.getWidth(),
                            bm.getHeight(), 500, 600);
                    bm = imageThumbnail.PicZoom(bm, bm.getWidth() / scale,
                            bm.getHeight() / scale);
                    roundImageView.setImageBitmap(bm);
                    imageThumbnail = null;
                }
                onSuccess(path);// 回调函数，返回图片路径
            }
        } catch (Exception e) {
            // TODO: handle exception
            Log.e("test", "获取头像失败" + e.getMessage());
        }
    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        utilimg = null;
        fileUri = null;
        roundImageView = null;
        time = null;
    }

    //成功后，回调，返回图片路径
    @Override
    public void onSuccess(Object result) {

    }

    @Override
    public void onFailure(Object result) {

    }
}
